Hadoop ディストリビューション対応 PySpark の初期化

Chorus Data セクションで Hadoop クラスター (EMR/CDH) を構成している場合は、PySpark を使用して HDFS データの読み取りと書き込みを行うことができます。このノートブックは、ワークフローのダウンストリーム オペレーターが使用できる Python 実行オペレーターとして公開できます。

この方法は、中規模または大規模なデータセットに対しては他の方法よりもはるかに効率的であり、数 GB を超えるサイズのデータセットを読み取る場合に唯一実行可能なオプションです。

PySpark は、Jupyter Notebooks for Team Studio で初期化して使用できます。

TIBCO Data Science - Team Studio の Notebooks 環境で開始します。
始める前にこの前提条件の更新は、[クラスター用に Pyspark を初期化] 関数を使用してTIBCO Data Science - Team Studio のバージョン6.5.0 より前にノートブックを作成した場合にのみ適用されます。これは、システムで Spark のアップグレードに対応するために必要です。
  1. [データ] > [クラスター用に Pyspark を初期化] をクリックして、PySpark コンテキストを再生成します。

  2. 以前に生成したコードを次のように変更します。
    os.environ['PYSPARK_SUBMIT_ARGS']=
    "--masteryarn-client --num-executors 1 --executor-memory 1g --packages com.databricks:spark-csv_2.10:1.5.0,com.databricks:spark-avro_2.11:3.0.1
    pyspark-shell"

Hadoop クラスターにアクセスできない場合は、PySpark ジョブをローカル モードで実行できます。PySpark をローカル モードで実行する前に、次の構成を設定します。

  1. PYSPARK_SUBMIT_ARGS 環境変数を次のように設定します。
    os.environ['PYSPARK_SUBMIT_ARGS']= '--master local pyspark-shell'
  2. YARN_CONF_DIR 環境変数は次のようになります。
    os.environ['YARN_CONF_DIR'] = ''
    手順
  1. 新しいノートブックを作成します
  2. [データ] をクリックし、[Hadoop ディストリビューション用に PySpark を初期化] を選択します。

    「データ」タブ - Hadoop ディストリビューション用に PySpark を初期化するオプション

  3. 接続するデータ ソースの選択 ダイアログが表示されます。既存の Hadoop データ ソースを選択し、[データ ソースの追加] をクリックします。

  4. ノートブックにちょっとしたコードが挿入されます。これにより、データ ソースとノートブック間の通信が容易になります。さらに多くのデータ ソースを読み込む場合は、手順 1 から手順 3 を繰り返します (Python 実行オペレーターへの入力の最大制限は 3 です)。このコードを実行するには、shift+enter を押すか、[実行] をクリックします。

    これで、挿入されたコード内のコメントを参照して他のコマンドを実行できるようになります。

    コマンドは、メソッドが正しく動作するために必要なパラメーターを備えたクラス ChorusCommander のインスタンス化されたオブジェクトであるオブジェクト cc を使用します。生成されたコードは、cc.read_input_file メソッド呼び出しで、sqlContext 引数を初期化された Spark セッションに設定します。 spark_options 辞書引数を設定して、CSV 形式の追加オプションを Spark データ フレーム リーダーに渡すことができます。

  5. データセットを読み取るには、そのデータセット用に生成されたコード内の行と、対応する spark_options を持つ _props 変数のコメントを解除します。

  6. ノートブックを Python 実行オペレーターとして使用するには、use_input_substitution パラメーターを [False] から [True] に変更し、読み込むデータセットの execution_label パラメータを追加します。execution_label の値は、後続のデータセットに対して、文字列 '1'から始まり、その後に '2''3' が続く必要があります。詳細については、help(cc.read_input_file) を参照してください。

  7. 生成された cc.read_input_file メソッド呼び出しは、Spark データ フレームを返します。必要に応じて、データ フレームに対して変更、コピー、またはその他の操作を実行できます。

  8. 必要な出力 Spark データ フレームが作成されたら、cc.write_output_file を使用してターゲット テーブルに書き込みます。

    • ダウンストリーム オペレーターでの出力の使用を有効にするには、use_output_substitution=True を設定します。

    • ターゲットと同じパスにある既存のファイルを上書きするには、overwrite_exists パラメーターを [True] に設定します。

    • spark_options 辞書引数を設定して、CSV 形式の追加オプションを Spark Data Frame Writer に渡すことができます。

    詳細については、help(cc.write_output_file) を参照してください。

    ノート:
    • これがワークフローのターミナル オペレーターではない場合は、header=True を設定しないでください。これは、後続のオペレーターが出力ファイルのヘッダー行ではなくオペレーター メタデータを使用するためです。

    • ワークフロー内の他のオペレーターとの互換性を保つために、write_output_file の区切り文字引数としてカンマ(,) を使用することも、区切り文字引数を使用しないこともできます。

  9. ノートブックをレガシー ワークフローで Python 実行 オペレーターとして使用できるように、ノートブックを手動で実行してメタデータを決定します。

サンプルコマンド

次のサンプル コマンドを使用してテーブルを書き込みます。

cc.write_output_table(ds1_adult_csv, table_name='adult_outemr2_hadoop.csv', schema_name='Compute_s3_local',
database_name='', sqlContext=spark,spark_options=ds1_props,
overwrite_exists=True,drop_if_exists=True, use_output_substitution=True)

次のサンプル コマンドを使用してファイルを書き込みます。

cc.datasource_name = 'EMR535_Large3'
cc.write_output_file(ds1_ Adult_csv, file_path='/tmp/Adult_out.csv',
sqlContext=spark, file_type='csv', spar_options={}, overwrite_exists=True)